package advancedFeatures;

import java.util.List;
import java.util.ArrayList;

/**
 * 通配符概念演示
 * 1. 无界通配符 <?>
 * 2. 上界通配符 <? extends Type>
 * 3. 下界通配符 <? super Type>
 */
public class Wildcards {
    // 无界通配符示例
    public static void printList(List<?> list) {
        for (Object item : list) {
            System.out.print(item + " ");
        }
        System.out.println();
    }
    
    // 上界通配符示例
    public static double sumNumbers(List<? extends Number> list) {
        double sum = 0.0;
        for (Number num : list) {
            sum += num.doubleValue();
        }
        return sum;
    }
    
    // 下界通配符示例
    public static void addIntegers(List<? super Integer> list) {
        for (int i = 1; i <= 5; i++) {
            list.add(i);
        }
    }
    
    public static void main(String[] args) {
        // 测试无界通配符
        List<String> strings = new ArrayList<>();
        strings.add("Hello");
        strings.add("World");
        
        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        
        System.out.println("打印字符串列表：");
        printList(strings);
        System.out.println("打印整数列表：");
        printList(integers);
        
        // 测试上界通配符
        List<Double> doubles = new ArrayList<>();
        doubles.add(1.1);
        doubles.add(2.2);
        
        System.out.println("整数列表的和：" + sumNumbers(integers));
        System.out.println("浮点数列表的和：" + sumNumbers(doubles));
        
        // 测试下界通配符
        List<Number> numbers = new ArrayList<>();
        addIntegers(numbers);
        System.out.println("添加整数后的数字列表：" + numbers);
    }
} 